Pyecharts可视化(二)

柱形图

In [8]:
from pyecharts import options as opts
from pyecharts.charts import Bar

bar1 = (
    # 图表类型
    Bar()
    .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
    .add_yaxis("商家B", [20, 30, 41, 15, 45, 100])
    # 配置项内容
    .set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
)
bar1.render_notebook()
Out[8]:

横向柱形图

In [25]:
from pyecharts import options as opts
from pyecharts.charts import Bar

def bar_reversal_axis():  # 返回的Bar的类实例
    bar1 = (
        # 图表类型
        Bar()
        .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
        .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
        .add_yaxis("商家B", [20, 30, 41, 15, 45, 100])
        # 翻转
        .reversal_axis()
        # 系列配置项
        .set_series_opts(label_opts=opts.LabelOpts(position='right'))
        # 配置项内容
        .set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
    )
    return bar1
In [27]:
barh = bar_reversal_axis()
barh.render_notebook()
Out[27]:

折线图

In [28]:
#可以用工具箱将柱形转换为折线,或者直接修改名称
from pyecharts import options as opts
from pyecharts.charts import Line

x = ['2018-{:0>2d}'.format(s) for s in range(1,13)]
y1 = [5,10,26,30,35,30,20,26,40,46,40,50]
y2 = [8,20,24,36,40,36,40,45,50,53,48,58]

bar1 = (
    # 图表类型
    Line()
    .add_xaxis(x)
    .add_yaxis("基金A", y1)
    .add_yaxis("基金B", y2)
    # 配置项内容
    .set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
)
bar1.render_notebook()
Out[28]:

散点图

In [29]:
from pyecharts.charts import Scatter
import numpy as np
import pandas as pd

df = pd.DataFrame()
df['weight'] = np.array([56,67,65,70,57,60,80,85,76,64],dtype='int32') #数组对象,必须是整型
df['height'] = np.array([162,170,168,172,168,172,180,176,178,170],dtype='int32')
df['height_m'] = [150,160,164,170,160,158,169,173,171,179]

scatter = Scatter()
scatter.add_xaxis(df['weight']) #散点图才可以是Series对象,其他的不行只能列表,Series需要进行转化
scatter.add_yaxis('男生',df['height'])
scatter.add_yaxis('女生',df['height_m'])
scatter.set_global_opts(title_opts=opts.TitleOpts(title="Scatter-基本示例"))
scatter.render_notebook()
Out[29]:

散点图数据支持series类型

箱线图

In [30]:
from pyecharts import options as opts
from pyecharts.charts import Boxplot

v1 = [
    [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880]
    + [1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
    [960, 940, 960, 940, 880, 800, 850, 880, 900]
    + [840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
]

v2 = [
    [890, 810, 810, 820, 800, 770, 760, 740, 750, 760]
    + [910, 920, 890, 860, 880, 720, 840, 850, 850, 780],
    [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870]
    + [870, 810, 740, 810, 940, 950, 800, 810, 870],
]


c = Boxplot()  #箱线图的名称
c.add_xaxis(["expr1", "expr2"])
c.add_yaxis("A", c.prepare_data(v1))  #实线是中位数  必须加入list.prepare_data,因为他不是dataframe对象
c.add_yaxis( 
    "B", c.prepare_data(v2)   # 计算 中位数  最小值 最大值...
)
c.set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例"))
c.render_notebook()
#数据格式最好要和上面一样
Out[30]:

饼图

In [41]:
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add("", [list(z) for z in zip(Faker.choose(), Faker.values())],radius=["30%", "70%"],) #数据格式需要对等
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))  #显示百分比
   
)
c.render_notebook()
Out[41]:
In [35]:
for i in zip(['a','b','c'],[1,2,3]):
    print(i)  #两数列对应组合
('a', 1)
('b', 2)
('c', 3)

词云图

  • jieba中文分词
  • WordCloud词云库
In [42]:
from pyecharts.charts import WordCloud

words = ['python','jupyter','numpy','pandas','matplotlib','sklearn',
        'xgboost','lightGBM','simpy','keras','tensorflow',
         'hive','hadoop','spark']
counts = [100,90,65,95,50,60,70,70,20,70,80,80,60,60]

cloud = WordCloud()
cloud.add("文章",zip(words,counts))
cloud.render_notebook()
Out[42]:

jieba库

In [43]:
import jieba
In [47]:
text = '7月17日以来,河南省遭遇极端强降雨,中西部、西北部地区出现成片大暴雨,部分地区特大暴雨。根据《国家防汛抗旱应急预案》有关规定,国家防总决定于7月20日20时启动防汛Ⅲ级应急响应。 河南因为暴雨路面出现大规模积水,多名人员被困,全国各地的人民都在关心河南暴雨情况,希望他们平安度过这关。为帮助河南因强降雨受困群众,九派新闻记者陆续搜集河南各地求助信息并进行电话求证核实,并将核实到的信息滚动发布于此条评论区。如您或者家人受困需发布求助信息,可直接在此条置顶内容评论区留言,或直接联系微信号XXXX。请有力量施予援手的你,积极转发扩散'
text_list = jieba.lcut(text) #分词
arr = np.array(text_list)
arr
Out[47]:
array(['7', '月', '17', '日', '以来', ',', '河南省', '遭遇', '极端', '强降雨', ',',
       '中西部', '、', '西北部', '地区', '出现', '成片', '大暴雨', ',', '部分', '地区', '特',
       '大暴雨', '。', '根据', '《', '国家', '防汛', '抗旱', '应急', '预案', '》', '有关',
       '规定', ',', '国家', '防总', '决定', '于', '7', '月', '20', '日', '20', '时',
       '启动', '防汛', 'Ⅲ', '级', '应急', '响应', '。', ' ', '河南', '因为', '暴雨', '路面',
       '出现', '大规模', '积水', ',', '多名', '人员', '被困', ',', '全国', '各地', '的',
       '人民', '都', '在', '关心', '河南', '暴雨', '情况', ',', '希望', '他们', '平安',
       '度过', '这关', '。', '为', '帮助', '河南', '因', '强降雨', '受困', '群众', ',',
       '九派', '新闻记者', '陆续', '搜集', '河南', '各地', '求助', '信息', '并', '进行', '电话',
       '求证', '核实', ',', '并', '将', '核实', '到', '的', '信息', '滚动', '发布', '于',
       '此条', '评论', '区', '。', '如', '您', '或者', '家人', '受困', '需', '发布', '求助',
       '信息', ',', '可', '直接', '在', '此条', '置顶', '内容', '评论', '区', '留言', ',',
       '或', '直接', '联系', '微', '信号', 'XXXX', '。', '请', '有', '力量', '施予',
       '援手', '的', '你', ',', '积极', '转发', '扩散'], dtype='<U4')
In [53]:
np.unique(arr,return_counts=True)  #统计计算词语
Out[53]:
(array([' ', '17', '20', '7', 'XXXX', 'Ⅲ', '、', '。', '《', '》', '中西部', '为',
        '九派', '于', '人员', '人民', '他们', '以来', '你', '信号', '信息', '全国', '关心',
        '内容', '决定', '出现', '到', '力量', '区', '发布', '受困', '可', '各地', '启动',
        '响应', '因', '因为', '国家', '在', '地区', '多名', '大暴雨', '大规模', '如', '家人',
        '将', '希望', '帮助', '平安', '并', '应急', '度过', '强降雨', '微', '您', '情况',
        '成片', '或', '或者', '扩散', '抗旱', '援手', '搜集', '新闻记者', '施予', '日', '时',
        '暴雨', '月', '有', '有关', '极端', '核实', '根据', '此条', '求助', '求证', '河南',
        '河南省', '滚动', '特', '电话', '留言', '的', '直接', '积极', '积水', '级', '置顶',
        '群众', '联系', '被困', '西北部', '规定', '评论', '请', '路面', '转发', '这关', '进行',
        '遭遇', '部分', '都', '防总', '防汛', '陆续', '需', '预案', ','], dtype='<U4'),
 array([ 1,  1,  2,  2,  1,  1,  1,  5,  1,  1,  1,  1,  1,  2,  1,  1,  1,
         1,  1,  1,  3,  1,  1,  1,  1,  2,  1,  1,  2,  2,  2,  1,  2,  1,
         1,  1,  1,  2,  2,  2,  1,  2,  1,  1,  1,  1,  1,  1,  1,  2,  2,
         1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  2,
         2,  1,  1,  1,  2,  1,  2,  2,  1,  4,  1,  1,  1,  1,  1,  3,  2,
         1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,
         1,  1,  2,  1,  1,  1, 12], dtype=int64))

地图

Map

In [58]:
[list(z) for z in zip(Faker.provinces, Faker.values())]
Out[58]:
[['广东', 44],
 ['北京', 24],
 ['上海', 135],
 ['江西', 25],
 ['湖南', 109],
 ['浙江', 61],
 ['江苏', 20]]
In [59]:
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker

c = (
    Map()   
    .add("商家A",[list(z) for z in zip(Faker.provinces, Faker.values())], "china")  # [['北京',29],['上海',42]]  #名称,数据,类型
    .set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"))
    #地区重复结果就会直接相加
    #世界地图需要英文,中国的就使用中文
)
c.render_notebook()
Out[59]:

Geo

In [60]:
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
 #默认不显示标签,是地理地图
c = (
    Geo()
    .add_schema(maptype="china")
    .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-基本示例")
    )
)
c.render_notebook()
Out[60]:
In [62]:
import math

from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Line3D


data = []
for t in range(0, 25000):
    _t = t / 1000
    x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
    y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
    z = _t + 2.0 * math.sin(75 * _t)
    data.append([x, y, z])
c = (
    Line3D()
    .add(
        "",
        data,
        xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="value"),
        yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="value"),
        grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            max_=30, min_=0, range_color=Faker.visual_color
        ),
        title_opts=opts.TitleOpts(title="Line3D-基本示例"),
    )
)
c.render_notebook()
Out[62]:
In [63]:
import pyecharts.options as opts
from pyecharts.charts import Bar3D

"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.baidu.com/examples/editor.html?c=bar3d-punch-card&gl=1

目前无法实现的功能:

1、光照和阴影暂时无法设置
"""

hours = [
    "12a",
    "1a",
    "2a",
    "3a",
    "4a",
    "5a",
    "6a",
    "7a",
    "8a",
    "9a",
    "10a",
    "11a",
    "12p",
    "1p",
    "2p",
    "3p",
    "4p",
    "5p",
    "6p",
    "7p",
    "8p",
    "9p",
    "10p",
    "11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]

data = [
    [0, 0, 5],
    [0, 1, 1],
    [0, 2, 0],
    [0, 3, 0],
    [0, 4, 0],
    [0, 5, 0],
    [0, 6, 0],
    [0, 7, 0],
    [0, 8, 0],
    [0, 9, 0],
    [0, 10, 0],
    [0, 11, 2],
    [0, 12, 4],
    [0, 13, 1],
    [0, 14, 1],
    [0, 15, 3],
    [0, 16, 4],
    [0, 17, 6],
    [0, 18, 4],
    [0, 19, 4],
    [0, 20, 3],
    [0, 21, 3],
    [0, 22, 2],
    [0, 23, 5],
    [1, 0, 7],
    [1, 1, 0],
    [1, 2, 0],
    [1, 3, 0],
    [1, 4, 0],
    [1, 5, 0],
    [1, 6, 0],
    [1, 7, 0],
    [1, 8, 0],
    [1, 9, 0],
    [1, 10, 5],
    [1, 11, 2],
    [1, 12, 2],
    [1, 13, 6],
    [1, 14, 9],
    [1, 15, 11],
    [1, 16, 6],
    [1, 17, 7],
    [1, 18, 8],
    [1, 19, 12],
    [1, 20, 5],
    [1, 21, 5],
    [1, 22, 7],
    [1, 23, 2],
    [2, 0, 1],
    [2, 1, 1],
    [2, 2, 0],
    [2, 3, 0],
    [2, 4, 0],
    [2, 5, 0],
    [2, 6, 0],
    [2, 7, 0],
    [2, 8, 0],
    [2, 9, 0],
    [2, 10, 3],
    [2, 11, 2],
    [2, 12, 1],
    [2, 13, 9],
    [2, 14, 8],
    [2, 15, 10],
    [2, 16, 6],
    [2, 17, 5],
    [2, 18, 5],
    [2, 19, 5],
    [2, 20, 7],
    [2, 21, 4],
    [2, 22, 2],
    [2, 23, 4],
    [3, 0, 7],
    [3, 1, 3],
    [3, 2, 0],
    [3, 3, 0],
    [3, 4, 0],
    [3, 5, 0],
    [3, 6, 0],
    [3, 7, 0],
    [3, 8, 1],
    [3, 9, 0],
    [3, 10, 5],
    [3, 11, 4],
    [3, 12, 7],
    [3, 13, 14],
    [3, 14, 13],
    [3, 15, 12],
    [3, 16, 9],
    [3, 17, 5],
    [3, 18, 5],
    [3, 19, 10],
    [3, 20, 6],
    [3, 21, 4],
    [3, 22, 4],
    [3, 23, 1],
    [4, 0, 1],
    [4, 1, 3],
    [4, 2, 0],
    [4, 3, 0],
    [4, 4, 0],
    [4, 5, 1],
    [4, 6, 0],
    [4, 7, 0],
    [4, 8, 0],
    [4, 9, 2],
    [4, 10, 4],
    [4, 11, 4],
    [4, 12, 2],
    [4, 13, 4],
    [4, 14, 4],
    [4, 15, 14],
    [4, 16, 12],
    [4, 17, 1],
    [4, 18, 8],
    [4, 19, 5],
    [4, 20, 3],
    [4, 21, 7],
    [4, 22, 3],
    [4, 23, 0],
    [5, 0, 2],
    [5, 1, 1],
    [5, 2, 0],
    [5, 3, 3],
    [5, 4, 0],
    [5, 5, 0],
    [5, 6, 0],
    [5, 7, 0],
    [5, 8, 2],
    [5, 9, 0],
    [5, 10, 4],
    [5, 11, 1],
    [5, 12, 5],
    [5, 13, 10],
    [5, 14, 5],
    [5, 15, 7],
    [5, 16, 11],
    [5, 17, 6],
    [5, 18, 0],
    [5, 19, 5],
    [5, 20, 3],
    [5, 21, 4],
    [5, 22, 2],
    [5, 23, 0],
    [6, 0, 1],
    [6, 1, 0],
    [6, 2, 0],
    [6, 3, 0],
    [6, 4, 0],
    [6, 5, 0],
    [6, 6, 0],
    [6, 7, 0],
    [6, 8, 0],
    [6, 9, 0],
    [6, 10, 1],
    [6, 11, 0],
    [6, 12, 2],
    [6, 13, 1],
    [6, 14, 3],
    [6, 15, 4],
    [6, 16, 0],
    [6, 17, 0],
    [6, 18, 0],
    [6, 19, 0],
    [6, 20, 1],
    [6, 21, 2],
    [6, 22, 2],
    [6, 23, 6],
]
data = [[d[1], d[0], d[2]] for d in data]


(
    Bar3D(init_opts=opts.InitOpts(width="1600px", height="800px"))
    .add(
        series_name="",
        data=data,
        xaxis3d_opts=opts.Axis3DOpts(type_="category", data=hours),
        yaxis3d_opts=opts.Axis3DOpts(type_="category", data=days),
        zaxis3d_opts=opts.Axis3DOpts(type_="value"),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            max_=20,
            range_color=[
                "#313695",
                "#4575b4",
                "#74add1",
                "#abd9e9",
                "#e0f3f8",
                "#ffffbf",
                "#fee090",
                "#fdae61",
                "#f46d43",
                "#d73027",
                "#a50026",
            ],
        )
    )
    .render_notebook()
)
Out[63]:

布局

In [64]:
from pyecharts import options as opts
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker

v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]


bar = (
    Bar()
    .add_xaxis(Faker.months)
    .add_yaxis("蒸发量", v1)
    .add_yaxis("降水量", v2)
    .extend_axis(
        yaxis=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(formatter="{value} °C"), interval=5
        )
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Overlap-bar+line"),
        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} ml")),
    )
)

line = Line().add_xaxis(Faker.months).add_yaxis("平均温度", v3, yaxis_index=1)
bar.overlap(line)
bar.render_notebook()
Out[64]:

并行多图Grid

In [73]:
from pyecharts import options as opts
from pyecharts.charts import Bar, Geo, Grid
from pyecharts.faker import Faker

bar = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(legend_opts=opts.LegendOpts(pos_left="20%"))
)


geo = (
    Geo()
    .add_schema(maptype="china")
    .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title="Grid-Geo-Bar"),
    )
)
grid = (
    Grid(init_opts=opts.InitOpts(width="900px",height="900px"))  #加大画布大小也行
    .add(bar,grid_opts=opts.GridOpts(pos_left="10%",pos_top="80%",is_show=True)) #调整间距,来避免重合
    .add(geo,grid_opts=opts.GridOpts(pos_left="90%",pos_top="10%",is_show=True))  #调整间距,来避免重合
#     .add(bar,grid_opts=opts.GridOpts(pos_left="10%",pos_top="80%"))
)
In [74]:
grid.render_notebook()
Out[74]:

顺序多图

In [75]:
from pyecharts import options as opts
from pyecharts.charts import Bar, Geo, Page
from pyecharts.faker import Faker

bar = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(legend_opts=opts.LegendOpts(pos_left="20%"))
)


geo = (
    Geo()
    .add_schema(maptype="china")
    .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title="Grid-Geo-Bar"),
    )
)
page = (
    Page()
    .add(bar) #没有参数,不能设置
    .add(geo) #没有参数,不能设置
)
In [76]:
page.render_notebook()
Out[76]:

选项卡

In [77]:
from pyecharts import options as opts
from pyecharts.charts import Bar, Geo, Tab
from pyecharts.faker import Faker

bar = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(legend_opts=opts.LegendOpts(pos_left="20%"))
)
geo = (
    Geo()
    .add_schema(maptype="china")
    .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title="Grid-Geo-Bar"),
    )
)
tab = (
    Tab()
    .add(geo,"地图")
    .add(bar,"柱形图")
)
In [78]:
tab.render_notebook() #组件选项卡
Out[78]:

时间线轮播

In [79]:
from pyecharts import options as opts
from pyecharts.charts import Pie, Timeline
from pyecharts.faker import Faker

attr = Faker.choose()
t1 = Timeline()
for i in range(2015,2021):
    pie = (
        Pie()
        .add(
            "商家A",
            [list(z) for z in zip(attr,Faker.values())],
#             rosetype="area",
#             radius=["30%","55%"],
        )
        .set_global_opts(title_opts=opts.TitleOpts('某商店{}年营业额'.format(i)))
    )
    t1.add(pie,"{}年".format(i))
t1.render_notebook()  #下面有时间线
Out[79]:

在ppt中插入Pyecharts图表 https://www.cnblogs.com/mark-wq/p/14168535.html

html要改ie内核: 加上:< meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"/>


评论
avatar
Alogomachine
不定时记录学习进度
关注我
最新文章
网站资讯
文章数目 :
36
本站总字数 :
243.3k
本站访客数 :
本站总访问量 :
最后更新时间 :